package com.yunchang.springboot.mapper.caravan;

import com.yunchang.springboot.config.BaseDao;
import com.yunchang.springboot.models.DO.CaravanStorageLogData;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author wanglongwei
 * @data 2019/9/6 10:55
 */
public interface CaravanStorageLogDataMapper extends BaseDao<CaravanStorageLogData> {

    /**
     * 根据流水id获取一条数据
     *
     * @param logId
     * @return
     */
    CaravanStorageLogData getOneInfoByLogId(@Param("logId") String logId);

    /**
     * 按时间升序获取所有状态为新增和已生成借贷关系的数据
     */
    List<CaravanStorageLogData> selectNewAndHandledData();

    /**
     * 根据sku和仓库查找在此之前的最近的那条数据
     */
    CaravanStorageLogData getPreviousDataBySkuAndWarehouse(@Param("sku") String sku,
                                                           @Param("warehouse") String warehouse,
                                                           @Param("timeCreate") String timeCreate);

    /**
     * 根据具体账单种类、sku、仓库、关联采购单号、时间查找该sku数量的总和
     */
    Integer getQuantitySumByDocumentTypeSkuWarehouseDocumentNumTime(@Param("documentType") String documentType,
                                                                    @Param("sku") String sku,
                                                                    @Param("warehouse") String warehouse,
                                                                    @Param("documentNum") String documentNum,
                                                                    @Param("time") String time);

    /**
     * 根据具体账单种类、sku、仓库、关联加工单号、时间查找该sku的出入库数据
     */
    CaravanStorageLogData getDataByDocumentTypeSkuWarehouseDocumentNumTime(@Param("documentType") String documentType,
                                                                           @Param("sku") String sku,
                                                                           @Param("documentNum") String documentNum,
                                                                           @Param("time") String time);

    /**
     * 更新出入库流水数据的处理状态
     * */
    int updateHandleStatusAndAmount(@Param("storageLogData")CaravanStorageLogData storageLogData);

    /**
     * 测试用，获得去年12月和今年1月的 按时间升序获取所有状态为新增和已生成借贷关系的数据
     * @return
     */
    List<CaravanStorageLogData> selectNewAndHandledDataInTwoMonth();

    /**
     * 获取最近的数据的日期
     * @return
     */
    String getLatestDate();

    /**
     * 根据shipment和stockSku集合获取Stock
     * @param documentNum
     * @param stockSkuList
     * @return
     */
    List<String> selectStockSkuByDocumentNumAndStockSkuList(@Param("documentNum") String documentNum,@Param("stockSkuList") List<String> stockSkuList);
}
